【Golang零基础入门】03 数据类型

基本数据类型

整型

有符号类型:int8、int16、int32、int64,分别对应8、16、32、64bit大小

无符号类型:uint8、uint16、uint32、uint64

浮点数与复数

float32和float64

两种精度的复数类型:complex64和complex128,分别对应float32和float64两种浮点数精度。

布尔型

true和false

字符串

只支持双引号,不支持单引号。string := "hello, go"

常量

const 标记。

ioat常量生成器,适合生成枚举类型。如下面的例子,Sunday被声明为0,Monday为1,一次类推。

1
2
3
4
5
6
7
8
9
10
11
type Weekday int

const (
Sunday Weekday = iota
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
)

复合数据类型

数组 array

数组的长度是固定,所以实际项目中是比较少直接使用

1
2
3
var num [10]int    // 声明长度为10的int类型数组,每个值初始值为0
var a [3]int = [3]int{1, 2, 3} // 声明时实例化
var a = [...]int{1, 2} // 使用...数组的长度由初始化的个数决定,例如这长度为2

切片 slice

变长的数组,如果你之前是写php,那你就可以把slice认为是php的无索引数组了,一般写作[]T

一个slice由三部分构成:指针、长度、容量。内置的len和cap函数返回对应长度和容量。
len(s) == 0判断是否为空,不应该用 s == nil

append扩展slice

1
2
var nums []int
nums = append(nums, 1, 2)

哈希表 map

是一个无序的key/value对的集合,写法:map[K]V。

如果你之前是写php,那你可以把它认为是php的索引数组,但没有PHP灵活,他的key,必须是同一类型,value也必须是统一类型。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
score := make(map[string]int)  // 创建key为string,value为int型

// 初始化方法1
score := map[string]int{
"lilei": 88,
"hanmeimei": 90,
}

// 初始化方法2
score := make(map[string]int)
score["lilei"] = 88
score["hanmeimei"] = 90

// 遍历
for name, num := range score {
fmt.Printf("%s\t%d\n", name, num)
}

// delete删除元素
delete(ages, "li") // remove element ages["li"]

// 小技巧,判断map中key是否存在
// map的下标语法将产生两个值;第一个是值,第二个是一个布尔值,用于报告元素是否真的存在。
if num, ok := score["xiaoming"]; ok {
//存在
}

结构体 struct

复杂聚合数据类型。如果成员首字母大写,则对外可见。

1
2
3
4
5
type Student struct {
ID int
Name string
Age int
}

结构体嵌入和匿名成员

1
2
3
4
5
6
7
8
9
10
11
12
13
type Person struct {
Name, Addr string
}

type Student struct {
Person
Subject string
}

var s student
s.Name = "lilei"
s.Addr = "beijing"
s.Subject = "shuxue"

Go语言的特性:可以只声明一个成员对应的数据类型而不指定成员名,如上Person。实际项目中开发使用该声明方式。

您的支持将鼓励我继续创作!